【完全版】pythonでMDFファイルのCANデータをcsv化する |
您所在的位置:网站首页 › python cantools › 【完全版】pythonでMDFファイルのCANデータをcsv化する |
VectorのCANapeやCANoeで取得したMDFファイル(MF4ファイル)をpythonの mdfreaderとpandasを使うことで、csv化することができます。 CANデータをcsv化して自動化したい方は必見です! pythonのmdfreaderとpandasを連携させてMDFファイルを読み込むpythonでMDFファイルを使う準備使い方レコーディングしたシグナル一覧を抽出するcsv化したいシグナルの一覧を作成する対象のシグナルをcsv化する pythonのmdfreaderとpandasを連携させてMDFファイルを読み込む![]() まずは、pythonのインストールが必要です。 下記記事の中でわかりやすく紹介しているのでインストールをしましょう ![]() mdfreaderのinstallが必要となるため、cmdを起動して 下記内容をコピペで貼り付けしましょう! >>pip install mdfreader 他に必要なものも全て一緒にインストールしてくれます。
※もしインストールのときにbitarrayのインストールでerrorが出た場合は、 下記リンク先の情報が勉強になりました。 エラーに書いてある通り「Visual C++ Build Tools 」をインストールすることで解決しました。 python pip実行時に「error: Microsoft Visual C++ 14.0 is required. Get it with “Build Tools for Visual Studio”」が発生した場合の対処法 ![]() ① レコーディングしたシグナル一覧を抽出する② csv化したいシグナルの一覧を作成する③ 対象のシグナルをcsv化する レコーディングしたシグナル一覧を抽出する下記内容で抽出できます。 mdfreaderをインスタンス化して、list_channelsに渡すことで抽出できます。 これをcsvで書き出します。 # -*- coding: utf-8 -*- import pandas as pd import mdfreader def mf4_all_signal_list(fname): yop = mdfreader.MdfInfo() df = pd.DataFrame(yop.list_channels(fname)) df.to_csv("list.csv") if __name__ == "__main__": fname = "Demo.mf4" mf4_all_signal_list(fname) csv化したいシグナルの一覧を作成するcsv化したいシグナル一覧を作成するために1つcsvファイルを作成しましょう。 その中に、上記で抽出したシグナルの中から、書き出ししたいシグナルをcsvに書き足していきます。 ![]() 最終的には、読み込んだmdfreaderインスタンスのchannel_listの引数として 下記のようなlist形式で読み込ませる必要があります。 [‘sample_signal_1’, ‘sample_signal_2’] >>inst = mdfreader.Mdf(fname, channel_list=signal_name, convert_after_read=False, metadata=2) # -*- coding: utf-8 -*- def Target_list(fname): list_data = pd.read_csv(fname).values.tolist() list_data = [flatten for inner in list_data for flatten in inner] print(list_data) return list_data if __name__ == "__main__": signal_list = Target_list("list.csv")5行目の内包表現をつかうことで、書き出ししたいシグナルリストをうまく 既定のlistフォーマットにすることができます。 ![]() 下記で対象となるMDF(MF4)ファイルを読み込み sampling周期を0.01[s]でdataframe化します。 >>inst = mdfreader.Mdf(ファイル名, channel_list=シグナルリスト, convert_after_read=False, metadata=2) >>df = inst.convert_to_pandas(sampling=0.01)
※ちなみにおまけ情報ですが、下記でMDFに記録されたコメントも書き出すことができます。 >>text = inst.fileMetadata[‘comment’] # -*- coding: utf-8 -*- import pandas as pd import mdfreader def mf4_all_signal_list(fname): yop = mdfreader.MdfInfo() df = pd.DataFrame(yop.list_channels(fname)) df.to_csv("list.csv") def Target_list(fname): list_data = pd.read_csv(fname).values.tolist() list_data = [flatten for inner in list_data for flatten in inner] print(list_data) return list_data def mf4_to_csv(fname, signal_name): inst = mdfreader.Mdf(fname, channel_list=signal_name, convert_after_read=False, metadata=2) df = inst.convert_to_pandas(sampling=0.01) df.to_csv(fname+".csv") # ついでにMDFに記録されたコメントも書き出す text = inst.fileMetadata['comment'] print (text,file=codecs.open(fname+".txt", 'w', 'utf-8')) if __name__ == "__main__": fname = "Demo.mf4" # mf4_all_signal_list(fname) signal_list = Target_list("list.csv") mf4_to_csv(fname, signal_list)
これで以上になります。 質問はTwitterから受け付けていますので、お気軽にどうぞ >>pythonで生き延びる社畜(@coin_python) | Twitter ラジオ放送でもエンジニアについて熱く語っています。こちらもお楽しみください >>社畜戦士のエンジニアを熱く語るラジオ | stand.fm
同じくVector製品のblfファイルもcsv化してみる ![]() プログラミング学習者へのオススメ記事 ![]() エンジニア志望者へのオススメ記事 ![]() |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |